#include <my_header.h>
/*Usage: ./01_mmap filename */
int main(int argc, char *argv[]){
    ARGS_CHECK(argc,2);
    //需要让mmap映射既可以读取文件内容，也可以修改文件内容
    //就需要吧文件的打开方式设置为读写模式 
    int fd = open(argv[1],O_RDWR);
    ERROR_CHECK(fd, -1,"open error");

    //测试一下文件映射的读写
    int ret = ftruncate(fd,5);
    //只要5个字节来测试一下
    ERROR_CHECK(ret, -1, "ftrucate error");
    char *p = (char *)mmap(NULL,5,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
    ERROR_CHECK(p,MAP_FAILED,"mmap error");
    //直接映射访问文件内容，通过映射直接输出文件内容
    for(int i = 0; i < 5; i++){
        printf("%c ",p[i]);
    }
    printf("\n");
    printf("--------------------------------------\n");
    //修改一下文件的某个位置的内容再次输出查看修改是否成功
    p[3] = '9';
    
    for(int i = 0; i < 5; i++){
    printf("%c ",p[i]);
    }
    
    //先开的最后再来关闭
    //先关闭mmap
    munmap(p,5);
    close(fd);
    return 0;
}


